﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Security.Cryptography;
using System.Text;

/******************************************************************************************
 ** 文件名：	CommonFunction
 ** 创建人：	Tony Mucor
 ** 日期：	2013-07-10
 ** 描述：	常用函数集合类
 *****************************************************************************************/

/// <summary>
/// CommonFunction 通用函数
/// </summary>
public class CommonFunction
{
	public CommonFunction()
	{
		
	}

	/**********************************************************************************************
	 ** 函数名：	ExceptString
	 ** 功能描述：	在一个字符串中去除尾部指定的字符串，如果尾部有的话，没有就不用去除
	 ** 输入参数：	lstrExcept		需要去除的字符串
	 **		lstrString
	 ** 输出参数：
	 ** 返回值：
	 ** 作者：	Tony Mucor
	 ** 日期：	2013-07-08
	 *********************************************************************************************/
	public static string ExceptString(string lstrExcept, string lstrString)
	{
		int lnExceptLen;
		int lnStringLen;
		string lstrReturn = "";
		string lstrTemp;

		lnExceptLen = lstrExcept.Length;		// 获得要去除字符串的长度
		lnStringLen = lstrString.Length;
		if (lnExceptLen > 0)
		{
			lstrTemp = lstrString.Substring(lnStringLen - lnExceptLen);
			if (lstrTemp == lstrExcept)
			{
				lstrReturn = lstrString.Substring(0, lnStringLen - lnExceptLen);
			}
			else
			{
				lstrReturn = lstrString;
			}
		}
		else
		{
			lstrReturn = lstrString;
		}

		return lstrReturn;
	}

	public static string OutLinkFirstChar(string lstrLink)
	{
		//return lstrLink.Substring(1, lstrLink.Length - 1);
		int i;

		i = lstrLink.LastIndexOf("/");

		return lstrLink.Substring(i + 1);
	}

	/// <summary>
	/// <para>功能描述：	把绝对路径转换成虚拟路径</para>
	/// <para>输入参数：	string imagesurl1	绝对路径</para>
	/// <para>		string strRootDir	网站根目录路径</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-06</para>
	/// <para>备注：	</para>
	/// </summary>
	public static string urlconvertor(string imagesurl1, string strRootDir)
	{
		//string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
		string tmpRootDir = strRootDir;
		string imagesurl2 = imagesurl1.Replace(tmpRootDir, ""); //转换成相对路径
		imagesurl2 = imagesurl2.Replace(@"\", @"/");
		return imagesurl2;
	}

	/// <summary>
	/// <para>功能描述：	在一个字符串中查找指定的字符串，找到返回true，字符串是用“， ”分割的</para>
	/// <para>输入参数：	string str1		需要查找的字符串</para>
	/// <para>		string strFind		要查找的字符串</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-08</para>
	/// <para>备注：	</para>
	/// </summary>
	public static Boolean FindString(string str1, string strFind)
	{
		//if (str1.IndexOf(strFind) > 0)
		//{
		//        return true;
		//}
		//else
		//{
		//        return false;
		//}
		Boolean bReturn;

		bReturn = false;
		string[] str = str1.Split(',');
		foreach (string strIn in str)
		{
			if (strIn.Trim() == strFind.Trim())
			{
				bReturn = true;
				break;
			}
		}

		return bReturn;
	}

	/// <summary>
	/// <para>功能描述：	获得有当前年月组成的字符串，类似201112</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	public</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-09</para>
	/// <para>备注：	</para>
	/// </summary>
	public static string GetNowYearMonth()
	{
		DateTime dtNow;
		string strReturn;

		dtNow = DateTime.Now;
		strReturn = dtNow.Year.ToString() + dtNow.Month.ToString();

		return strReturn;
	}

	/// <summary>
	/// <para>功能描述：	获得一个以现在日期命名的文件夹名字，类似20111231</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	public</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-09</para>
	/// <para>备注：	</para>
	/// </summary>
	public static string GetNowDate()
	{
		DateTime dtNow;
		string strReturn;

		dtNow = DateTime.Now;
		strReturn = dtNow.Year.ToString() + dtNow.Month.ToString() + dtNow.Day.ToString();

		return strReturn;
	}

	/// <summary>
	/// <para>功能描述：	获得当前时间的字符串，类似1549</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	private</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-09</para>
	/// <para>备注：	</para>
	/// </summary>
	private static string GetNowTime()
	{
		DateTime dtNow;
		string strReturn;

		dtNow = DateTime.Now;
		strReturn = dtNow.Hour.ToString() + dtNow.Minute.ToString() + dtNow.Second.ToString();

		return strReturn;
	}

	/// <summary>
	/// <para>功能描述：	获得当前日期时间组成的字符串，类似201112311552</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	public</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-09</para>
	/// <para>备注：	</para>
	/// </summary>
	public static string GetNowDateTime()
	{
		return GetNowDate() + GetNowTime();
	}

	/// <summary>
	/// <para>功能描述：	获得一个字符串的MD5编码</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	public</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-09</para>
	/// <para>备注：	</para>
	/// </summary>
	public static string GetMd5Hash(string input)
	{
		MD5 md5Hash;

		md5Hash = MD5.Create();

		// Convert the input string to a byte array and compute the hash.
		byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));

		// Create a new Stringbuilder to collect the bytes
		// and create a string.
		StringBuilder sBuilder = new StringBuilder();

		// Loop through each byte of the hashed data 
		// and format each one as a hexadecimal string.
		for (int i = 0; i < data.Length; i++)
		{
			sBuilder.Append(data[i].ToString("x2"));
		}

		// Return the hexadecimal string.
		return sBuilder.ToString();
	}

	/// <summary>
	/// 如果文件名中包含中文字，进行转换以免出现乱码
	/// </summary>
	/**********************************************************************************************
	 ** 功能描述：	如果文件名中包含中文字，进行转换以免出现乱码
	 ** 输入参数：
	 ** 返回值：
	 ** 作者：	Tony Mucor
	 ** 日期：	2013-08-15
	 ** 修改：
	 ** 日期：
	 *********************************************************************************************/
	public static string UTF_FileName(string strFilename)
	{

		return HttpUtility.UrlEncode(strFilename, System.Text.Encoding.UTF8);

	}
}
